﻿//=============================================================================
// SharpTemplate.NET - Generic template parser
//
// Copyright (c) 2008 Philippe Leybaert
//
// Permission is hereby granted, free of charge, to any person obtaining a copy 
// of this software and associated documentation files (the "Software"), to deal 
// in the Software without restriction, including without limitation the rights 
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
// copies of the Software, and to permit persons to whom the Software is 
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in 
// all copies or substantial portions of the Software.
// 
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 
// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
// IN THE SOFTWARE.
//=============================================================================

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;

namespace Activa.SharpTemplate
{
    public class TokenMatch
    {
        public TokenMatch(Regex regex, Match m, TemplateTokenType tokenType, bool removeEmptyLine, string tokenId)
        {
            _tokenType = tokenType;
        	_match = m.Value;

            string[] groupNames = regex.GetGroupNames();

            foreach (string groupName in groupNames)
            {
                Group group = m.Groups[groupName];

                if (group.Success)
                {
                    SubMatches[groupName] = group.Value;
                }
            }

        	_removeEmptyLine = removeEmptyLine;
            _tokenId = tokenId;
        }

        private readonly string _match;
        private readonly Dictionary<string, string> _subMatches = new Dictionary<string, string>();
        private readonly TemplateTokenType _tokenType;
    	private readonly bool _removeEmptyLine;
        private readonly string _tokenId;

    	public bool RemoveEmptyLine
    	{
    		get { return _removeEmptyLine; }
    	}

    	public TemplateTokenType TokenType
    	{
    		get { return _tokenType; }
    	}

    	public Dictionary<string, string> SubMatches
    	{
    		get { return _subMatches; }
    	}

    	public string Match
    	{
    		get { return _match; }
    	}

        public string TokenId
        {
            get { return _tokenId; }
        }
    }
}